//
//  WBStatusListViewModel.swift
//  个人微博
//
//  Created by 任聪聪 on 2017/11/7.
//  Copyright © 2017年 任孜聪. All rights reserved.
//

import Foundation
//微博数据视图模型
//区分要不要用继承父类的类
//如果是KVC模型或者是字典转模型框架设置对象值就需要继承NSobject
//如果只是包装一些函数（写一些方法）不需要继承NSobject，好处更加轻量级不用处理父类方法
//视图模型数据目的
//1.字典转模型／2.实现上拉／下拉刷新
//定义数据为空时上拉刷新最大次数
fileprivate let pullUpMaxTiems = 3
class WBStatusListViewModel {
    //用懒加载定义模型数组
    lazy var statusLists = [WBStatus]()
    //定义上拉刷新数据为空时记数
    fileprivate var pullUpErrorTimes = 0
    //建立加载微博数据方法
    
    /// <#Description#>
    ///
    /// - Parameters:
    ///   - isPullUp: 是否上拉刷新标志
    ///   - completion: 闭包返回微博数据/是否刷新表格
    func loadStatusLists(isPullUp:Bool,completion:@escaping (_ isSucess:Bool,_ isRefreshTable:Bool)->()) {
        if isPullUp&&pullUpErrorTimes>pullUpMaxTiems{
            completion(true, false)
            return
        }
        //获取第一条数据
        let since_id = isPullUp ? 0:(statusLists.first?.id ?? 0)
        //获取最后一条数据
        var max_id = !isPullUp ? 0:(statusLists.last?.id ?? 0)
        max_id = max_id>0 ? max_id-1:0
        //1.获取微博网络数据
        WBNetWorkManager.shared.statusList(since_id: since_id,max_id: max_id) { (statusList, isSucess) in
            //微博字典数据转模型
            guard let status = NSArray.yy_modelArray(with: WBStatus.self, json: statusList ?? []) as? [WBStatus]else{
                completion(isSucess,false)
                return
            }
            print("上拉刷新\(status.count)条数据")
            if isPullUp{
                //拼接数据将上拉刷新的数据放在最后一行
                self.statusLists += status
            }else{
                //拼接数据将下拉刷新的数据放在第一行
                self.statusLists = status + self.statusLists
            }
            if isPullUp&&status.count==0{
                self.pullUpErrorTimes += 1
                completion(isSucess, true)
            }else{
                //完成回调
                completion(isSucess,true)
            }
        }
    }
}
